package com.yy.wga.pay.feign.response;

import lombok.Data;

import java.util.List;

/**
 * 微信支付回调
 * @author guochao
 * @date 2021/6/5
 */
@Data
public class WechatPayNotifyResponse {

    //    应用ID	appid	string[1,32]	是	直连商户申请的公众号或移动应用appid。
//    示例值：wxd678efh567hg6787
    private String appid;

    //    商户号	mchid	string[1,32]	是	商户的商户号，由微信支付生成并下发。
//    示例值：1230000109
    private String mchid;

    //    商户订单号	out_trade_no	string[6,32]	是	商户系统内部订单号，只能是数字、大小写字母_-*且在同一个商户号下唯一。
//    特殊规则：最小字符长度为6
//    示例值：1217752501201407033233368018
    private String out_trade_no;

    //    微信支付订单号	transaction_id	string[1,32]	是	微信支付系统生成的订单号。
//    示例值：1217752501201407033233368018
    private String transaction_id;

    //    交易类型	trade_type	string[1,16]	是	交易类型，枚举值：
//    JSAPI：公众号支付
//    NATIVE：扫码支付
//    APP：APP支付
//    MICROPAY：付款码支付
//    MWEB：H5支付
//    FACEPAY：刷脸支付
//    示例值：MICROPAY
    private String trade_type;

    //    交易状态	trade_state	string[1,32]	是	交易状态，枚举值：
//    SUCCESS：支付成功
//    REFUND：转入退款
//    NOTPAY：未支付
//    CLOSED：已关闭
//    REVOKED：已撤销（付款码支付）
//    USERPAYING：用户支付中（付款码支付）
//    PAYERROR：支付失败(其他原因，如银行返回失败)
//    示例值：SUCCESS
    private String trade_state;

    //    交易状态描述	trade_state_desc	string[1,256]	是	交易状态描述
//    示例值：支付成功
//    付款银行	bank_type	string[1,16]	是	银行类型，采用字符串类型的银行标识。银行标识请参考《银行类型对照表》
//    示例值：CMC
    private String bank_type;

    //    附加数据	attach	string[1,128]	否	附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用
//    示例值：自定义数据
    private String attach;

    //    支付完成时间	success_time	string[1,64]	是	支付完成时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE，YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日 13点29分35秒。
//    示例值：2018-06-08T10:34:56+08:00
    private String success_time;

    //    -支付者	payer	object	是	支付者信息
    private PayerDto payer;

    //    订单金额	amount	object	是	订单金额信息
    private AmountDto amount;

    //    场景信息	scene_info	object	否	支付场景信息描述
    private SceneInfoDto sceneInfo;

    //    优惠功能	promotion_detail	array	否	优惠功能，享受优惠时返回该字段
    private PromotionDetailDto promotion_detail;

    @Data
    public static class PayerDto {
        //        用户标识	openid	string[1,128]	是	用户在直连商户appid下的唯一标识。
//        示例值：oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
        private String openid;
    }

    @Data
    public static class AmountDto {
        //        总金额	total	int	是	订单总金额，单位为分。
//        示例值：100
        private Long total;

        //        用户支付金额	payer_total	int	是	用户支付金额，单位为分。
//        示例值：100
        private Long payer_total;

        //        货币类型	currency	string[1,16]	是	CNY：人民币，境内商户号仅支持人民币。
//        示例值：CNY
        private String currency;

        //        用户支付币种	payer_currency	string[1,16]	是	用户支付币种
//        示例值：CNY
        private String payer_currency;
    }

    @Data
    public static class SceneInfoDto {
        //        商户端设备号	device_id	string[1,32]	否	终端设备号（门店号或收银设备ID）。
//        示例值：013467007045764
        private String device_id;
    }

    public static class PromotionDetailDto {
        //        券ID	coupon_id	string[1,32]	是	券ID
//        示例值：109519
        private String coupon_id;

        //        优惠名称	name	string[1,64]	否	优惠名称
//        示例值：单品惠-6
        private String name;

        //        优惠范围	scope	string[1,32]	否	GLOBAL：全场代金券
//        SINGLE：单品优惠
//        示例值：GLOBAL
        private String scope;

        //        优惠类型	type	string[1,32]	否	CASH：充值
//        NOCASH：预充值
//        示例值：CASH
        private String type;

        //        优惠券面额	amount	int	是	优惠券面额
//        示例值：100
        private Long amount;

        //        活动ID	stock_id	string[1,32]	否	活动ID
//        示例值：931386
        private String stock_id;

        //        微信出资	wechatpay_contribute	int	否	微信出资，单位为分
//        示例值：0
        private Long wechatpay_contribute;

        //        商户出资	merchant_contribute	int	否	商户出资，单位为分
//        示例值：0
        private Long merchant_contribute;

        //        其他出资	other_contribute	int	否	其他出资，单位为分
//        示例值：0
        private Long other_contribute;

        //        优惠币种	currency	string[1,16]	否	CNY：人民币，境内商户号仅支持人民币。
//        示例值：CNY
        private String currency;

        //        -单品列表	goods_detail	array	否	单品列表信息
        private List<GoodsDetailDto> goods_detail;
    }

    @Data
    public static class GoodsDetailDto {
        //        商品编码	goods_id
//        string[1,32]
//        是	商品编码
//        示例值：M1006
        private String goods_id;

        //        商品数量	quantity	int	是	用户购买的数量
//        示例值：1
        private Integer quantity;

        //        商品单价	unit_price	int	是	商品单价，单位为分
//        示例值：100
        private Long unit_price;

        //        商品优惠金额	discount_amount	int	是	商品优惠金额
//        示例值：0
        private Long discount_amount;

        //        商品备注	goods_remark	string[1,128]	否	商品备注信息
//        示例值：商品备注信息
        private String goods_remark;
    }


}
